#pragma once
#ifndef Vector3_H
#define Vector3_H

#include <math.h>
#include <iostream>

using namespace std;

class Vector3
{
public:
	Vector3();
	Vector3(const float x, const float y, const float z = 0);
	Vector3(const Vector3 &vec);
	~Vector3();
	
	void operator =(const Vector3 &v);
	Vector3 operator +(const Vector3 &v);
	Vector3 operator +(const float a);
	Vector3 operator -(const Vector3 &v);
	Vector3 operator *(const float scale);
	Vector3 &operator +=(const Vector3 &v);
	Vector3 &operator -=(const Vector3 &v);
	Vector3 &operator *=(const float scale);
	bool operator<(const Vector3& v);
	bool operator<=(const Vector3& v);
	bool operator>(const Vector3& v);
	bool operator>=(const Vector3& v);

	float length(void);
	void normalize(void);
	static Vector3 crossProduct(const Vector3& v1, const Vector3& v2);
	static float dotProduct(const Vector3& v1, const Vector3& v2);

	friend ostream& operator << (ostream& os, const Vector3& v);
	
	float x, y, z;
	
};
#endif //Vector3_H
